//
//  OAuthViewController.swift
//  CC-SinaWeibo
//
//  Created by Chenchen on 16/2/17.
//  Copyright © 2016年 Chenchen. All rights reserved.
//

/*
client_id = App Key：3304327347
App Secret：40b87ef214c881b1c638747eb6f67941
redirect_uri 回调:http://www.baidu.com
*/

import UIKit

import SVProgressHUD
import AFNetworking

class OAuthViewController:UIViewController {
    // 属性的WebView
    let webView = UIWebView()
    
// 关闭页面
    @objc private func close() {
        // dismiss页面
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    override func loadView() {
        view = webView
        // 设置webView代理
        webView.delegate = self
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置导航条 -- 关闭按钮
        setNavBarCeShi()
        // 设置导航条 -- 注册按钮按钮
        setNavBarGuanBi()
        // 加载授权页面
        loadOAuthPage()
    }
    
    // 在页面将要消失的时候 dismiss
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        // dismiss掉
        SVProgressHUD.dismiss()
    }
    
    
    // 设置导航条 -- 关闭按钮
    private func setNavBarGuanBi() {
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style:.Plain, target: self, action: "close")
    }
    // 设置导航条 -- 测试帐号按钮
    private func setNavBarCeShi() {
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "测试帐号", style:.Plain, target: self, action: "testAccount")
    }
    
    // 模拟器和web网页的交互界面
    @objc private func testAccount() {
        // javascript代码对象
        let jsStr = "document.getElementById('userId').value = '18310648023',document.getElementById('passwd').value = 'chenchen8023...' "
        // 通过一个字符串字符串对象来执行 javascript代码
        webView.stringByEvaluatingJavaScriptFromString(jsStr)
    }
    // 加载授权页面
    private func loadOAuthPage() {
        // 获取uir
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=" + client_id + "&redirect_uri=" + redirect_uri
        
        //        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=3304327347&redirect_uri=http://www.baidu.com"
        // url
        let url = NSURL(string:urlString)!
        // 获取request请求
        let request = NSURLRequest(URL: url)
        // 加载请求
        webView.loadRequest(request)
    }
}

// 类的协议方法
extension OAuthViewController:UIWebViewDelegate {
    // 显示用户等待指示灯
    func webViewDidStartLoad(webView: UIWebView) {
        // 显示
        SVProgressHUD.show()
    }
    // 隐藏用户等待指示灯
    func webViewDidFinishLoad(webView: UIWebView) {
        // 隐藏
        SVProgressHUD.dismiss()
    }
    
    // 协议方法,获取登录成功后的Code(授权码)
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        // 绝对路径的string类型, guard-->如果数值为空,当前代码直接返回
        guard let urlString = request.URL?.absoluteString else {
            // 返回,urlString 为空,不能够加载页面
            return false
        }
        // 判断urlSting中是否包含code码
        if urlString.containsString("code") { // 如果包含
            // 截取相对应的code码
            guard let query = request.URL?.query else { // guard如果没有,就return跳出
                return false
            }
            // code的字符串
            let codeStr = "code="
            // 从 "="号 右边截取
            let code = (query as NSString).substringFromIndex(codeStr.characters.count)

            // 用code换取token(令牌)
//            loadAccessTonken(code)
            CCAccounVeiwModel.sharedAccountViewModel.loadAccessTonken(code, finished: { (isSuccess) -> () in
                
                if isSuccess {  // 登录成功
                    
                    // 执行dismiss,干掉窗口
                    self.dismissViewControllerAnimated(true, completion: nil)
                    
                    // 登录成功之后,将跟视图控制器设置为 欢迎页面
//                     UIApplication.sharedApplication().keyWindow?.rootViewController = CCMainUITabBarController()
                       NSNotificationCenter.defaultCenter().postNotificationName(KChoseRootVC, object: nil)
                } else {  // 登录失败
                    // 失败提示
                    SVProgressHUD.showErrorWithStatus("登录失败,别问我为什么!")
                    
                }
                
                })
            // 返回
            return false
        }
        return true
    }
    
}
























